package br.com.abenildo.controle;

import java.sql.SQLException;
import java.util.ArrayList;

import br.com.abenildo.exception.CodLivroInvalidoException;
import br.com.abenildo.exception.LivroJaCadastradoException;
import br.com.abenildo.exception.LivroNaoEncontradoException;
import br.com.abenildo.exception.RepositorioException;
import br.com.abenildo.modelo.IRepositorioLivro;
import br.com.abenildo.modelo.RepositorioLivroBDR;
import br.com.abenildo.modelo.Validacao;

public class ControladorLivro {
	
	IRepositorioLivro repositoriolivro;
	
	//Adicionei uma conversao
	public ControladorLivro()throws Exception{
		this.repositoriolivro = (IRepositorioLivro) new RepositorioLivroBDR();
	}
	 public void cadastrarLivro(Livro livro)throws LivroJaCadastradoException,RepositorioException,CodLivroInvalidoException,SQLException, LivroNaoEncontradoException{
		 CadastroLivro cadastrolivro = new CadastroLivro(this.repositoriolivro);
		 
		 if(!Validacao.validaCodLivro(livro.getCodLivro()))throw new CodLivroInvalidoException(livro.getCodLivro());
		 cadastrolivro.cadastrarLivro(livro);
	 }
	 
	 public void removerLivro(int Cod_Livro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		 CadastroLivro cadastrolivro = new CadastroLivro(this.repositoriolivro);
		 
		 if(!Validacao.validaCodLivro(Cod_Livro))throw new CodLivroInvalidoException(Cod_Livro);
		 
		 this.procurarLivro(Cod_Livro);
		  
		cadastrolivro.removerLivro(Cod_Livro);
	 
	 }
	 
	  public Livro procurarLivro(int Cod_Livro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		  CadastroLivro cadastrolivro = new CadastroLivro(this.repositoriolivro);
		  
		  return cadastrolivro.procurarLivro(Cod_Livro);
	  }
	  
	  public void atualizarLivro(Livro livro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		  CadastroLivro cadastrolivro = new CadastroLivro(this.repositoriolivro);
		  
		  if(!Validacao.validaCodLivro(livro.getCodLivro())) throw new CodLivroInvalidoException(livro.getCodLivro());
		  
		  cadastrolivro.atualizarLivro(livro);
	  }
	  
	   public ArrayList<Livro>listarLivro()throws SQLException{
		   
		   CadastroLivro cadastrolivro = new CadastroLivro(this.repositoriolivro);
		   cadastrolivro.listarLivro();
		   return cadastrolivro.listarLivro();
	   }
	  
}
